home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / vbpong1a / ball2.cls < prev    next >
Text File  |  1999-08-15  |  5KB  |  167 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "Ball"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Public x As Long, y As Long, xvel As Long, yvel As Long
  15. Private surfBall As CDXVBSurface
  16.  
  17. Private Pixels(9) As PixelPoint
  18.  
  19. Public Sub Init(dd As CDXVBScreen, nx As Integer, ny As Integer, nxv, nyv, FN As String)
  20.     Set surfBall = New CDXVBSurface
  21.     surfBall.Create App.Path & "\" & FN, dd
  22.     
  23.     x = nx
  24.     y = ny
  25.     xvel = nxv
  26.     yvel = nyv
  27.     
  28.     For i = 0 To UBound(Pixels)
  29.         Pixels(i).bActive = False
  30.         Pixels(i).decay = 30
  31.     Next i
  32. End Sub
  33.  
  34. Private Sub SpawnPixel()
  35.     For i = 0 To UBound(Pixels)
  36.         If Not Pixels(i).bActive Then
  37.             Randomize
  38.         
  39.             Pixels(i).bActive = True
  40.             Pixels(i).life = 255
  41.             Pixels(i).t = Int(Rnd * 2)
  42.             If xvel < 0 Then
  43.                 Pixels(i).x = x + 9 + Int(Rnd * 9)
  44.             Else
  45.                 Pixels(i).x = x - Int(Rnd * 9)
  46.             End If
  47.             If yvel < 0 Then
  48.                 Pixels(i).y = y + 9 + Int(Rnd * 9)
  49.             Else
  50.                 Pixels(i).y = y - Int(Rnd * 9)
  51.             End If
  52.             Pixels(i).decay = Int(Rnd * 20) + 20
  53.             
  54.             Exit For
  55.         End If
  56.     Next i
  57. End Sub
  58.  
  59. Private Sub RenderPixels(surf As IDirectDrawSurface2, red As Boolean)
  60.     Dim hDC As Long
  61.  
  62.     surf.GetDC hDC
  63.     
  64.     For i = 0 To UBound(Pixels)
  65.         If Pixels(i).bActive Then
  66.             If red Then
  67.                 If Pixels(i).t = 1 Then
  68.                     SetPixel hDC, Pixels(i).x, Pixels(i).y, RGB(Pixels(i).life, 0, 0)
  69.                     SetPixel hDC, Pixels(i).x - 1, Pixels(i).y, RGB(Pixels(i).life, 0, 0)
  70.                     SetPixel hDC, Pixels(i).x, Pixels(i).y - 1, RGB(Pixels(i).life, 0, 0)
  71.                     SetPixel hDC, Pixels(i).x + 1, Pixels(i).y, RGB(Pixels(i).life, 0, 0)
  72.                     SetPixel hDC, Pixels(i).x, Pixels(i).y + 1, RGB(Pixels(i).life, 0, 0)
  73.                 Else
  74.                     SetPixel hDC, Pixels(i).x, Pixels(i).y, RGB(Pixels(i).life, 0, 0)
  75.                 End If
  76.             Else
  77.                 If Pixels(i).t = 1 Then
  78.                     SetPixel hDC, Pixels(i).x, Pixels(i).y, RGB(0, Pixels(i).life, 0)
  79.                     SetPixel hDC, Pixels(i).x - 1, Pixels(i).y, RGB(0, Pixels(i).life, 0)
  80.                     SetPixel hDC, Pixels(i).x, Pixels(i).y - 1, RGB(0, Pixels(i).life, 0)
  81.                     SetPixel hDC, Pixels(i).x + 1, Pixels(i).y, RGB(0, Pixels(i).life, 0)
  82.                     SetPixel hDC, Pixels(i).x, Pixels(i).y + 1, RGB(0, Pixels(i).life, 0)
  83.                 Else
  84.                     SetPixel hDC, Pixels(i).x, Pixels(i).y, RGB(0, Pixels(i).life, 0)
  85.                 End If
  86.             End If
  87.             
  88.             Pixels(i).life = Pixels(i).life - Pixels(i).decay
  89.             If Pixels(i).life <= 0 Then Pixels(i).bActive = False
  90.         End If
  91.     Next i
  92.     
  93.     surf.ReleaseDC hDC
  94. End Sub
  95.  
  96. Public Sub Move(p1 As Player, p2 As Player, b1 As Ball, itype As Integer)
  97.     Dim p1r As RECT, p2r As RECT, ballr1 As RECT, ballr2 As RECT, dr As RECT
  98.     With p1r
  99.         .Top = p1.y
  100.         .Left = p1.x
  101.         .Bottom = p1.y + 40
  102.         .Right = p1.x + 10
  103.     End With
  104.     With p2r
  105.         .Top = p2.y
  106.         .Left = p2.x
  107.         .Bottom = p2.y + 40
  108.         .Right = p2.x + 10
  109.     End With
  110.     With ballr1
  111.         .Top = y
  112.         .Left = x
  113.         .Bottom = y + 9
  114.         .Right = x + 9
  115.     End With
  116.     With ballr2
  117.         .Top = b1.y
  118.         .Left = b1.x
  119.         .Bottom = b1.y + 9
  120.         .Right = b1.x + 9
  121.     End With
  122.  
  123.     x = x + xvel
  124.     y = y + yvel
  125.     
  126.     If x < 0 Then
  127.         x = 0
  128.         xvel = -xvel
  129.         BlockCode.RestoreRedBlock
  130.         DSoundCode.PlayBounce1
  131.     End If
  132.     If x > 631 Then
  133.         x = 631
  134.         xvel = -xvel
  135.         BlockCode.RestoreGreenBlock
  136.         DSoundCode.PlayBounce1
  137.     End If
  138.     If y < 10 Then y = 10: yvel = -yvel: DSoundCode.PlayBounce1
  139.     If y > 371 Then y = 371: yvel = -yvel: DSoundCode.PlayBounce1
  140.     
  141.     ' Bat collision detection
  142.     If IntersectRect(dr, p1r, ballr1) Then
  143.         x = p1.x + 10
  144.         xvel = -xvel
  145.         yvel = (dr.Top - x) / 64
  146.         DSoundCode.PlayBounce1
  147.     End If
  148.     If IntersectRect(dr, p2r, ballr1) Then
  149.         x = p2.x - 9
  150.         xvel = -xvel
  151.         yvel = (dr.Top - x) / 64
  152.         DSoundCode.PlayBounce1
  153.     End If
  154.     If IntersectRect(dr, ballr1, ballr2) Then
  155.         xvel = -xvel
  156.         x = x + xvel
  157.         b1.xvel = -b1.xvel
  158.         b1.x = b1.x + b1.xvel
  159.     End If
  160. End Sub
  161.  
  162. Public Sub Draw(back As IDirectDrawSurface2, red As Boolean)
  163.     surfBall.Blit x, y, back
  164.     SpawnPixel
  165.     RenderPixels back, red
  166. End Sub
  167.